#pragma once
#include <vector>

namespace geofile
{
	enum class HorizontalElementType
	{
        Straight = 1,
        Arc,
        Clothoid,
        Bloss,
        Schramn,
        CubicParabola,
        AustralianCubicParabola,
        HalfSine,
        KoreanCubicParabola,
        ItalianCubicParabola,
        Cosinusoidal,
        End
	};
	struct HorizontalElement
	{
		double startStationing{ 0.0 };
		double endStationing{ 0.0 };
        HorizontalElementType type;
		double startRadius{ 0.0 };
		double endRadius{ 0.0 };
	};
    using HorizontalAlignment = std::vector<HorizontalElement>;

    enum class VerticalElementType
    {
        KinK = 0,
        Arc
    };
    struct VerticalElement
    {
        double centerStationing{ 0.0 };
        VerticalElementType type;
        double slopIn{ 0.0 };
        double slopOut{ 0.0 };
        double radius{ 0.0 };
    };
    using VerticalAlignment = std::vector<VerticalElement>;


    struct DesignAlignment
    {
        HorizontalAlignment horAlignment;
        VerticalAlignment verAlignment;
    };

    //read *.geo file
    bool readGeoFile(const char* path, DesignAlignment* resultOut);

    //Create *.geo file by radius
    bool createGeoFileByRadius(const char* path, DesignAlignment* pDesignAlignment);

    //Create *.geo file by tangent length
    bool createGeoFileByTangentLength(const char* path, DesignAlignment* pDesignAlignment);




    bool createGeoFileByRadius(const char* path, DesignAlignment* pDesignAlignment)
    {

    }
    bool createGeoFileByTangentLength(const char* path, DesignAlignment* pDesignAlignment)
    {

    }

    bool readGeoFile(const char* path, DesignAlignment* pDesignAlignment)
    {

    }
}